/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ejb.timeservice;

import com.entidades.Campanha;
import com.entidades.Pacote;
import com.entidades.dao.DaoBasico;
import com.entidades.enumerandos.OperadorasEnum;
import com.entidades.enumerandos.StatusPacoteEnum;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.UserTransaction;

/**
 *
 * @author admprojovem
 */
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@Stateless
public class CriadorPacotesTSBean implements CriadorPacotesTSRemote {

    @Resource
    private TimerService time;
    @PersistenceContext
    private EntityManager em;
    @Resource
    private UserTransaction utx;

    public void incializaTimeService() {
        System.out.println("CRIADOR >>> Serviço iniciado");
        time.createTimer(60 * 100, 60 * 250, null);
    }

    @Timeout
    public void criarPacotes(Timer timer) {
        criar();

    }

    private void criar() {
        List<Campanha> listaRetorno = (List<Campanha>) em.createQuery("select c from Campanha as c " +
                "where c.listaPacotes.size = 0").setMaxResults(1).getResultList();

        if (listaRetorno != null && listaRetorno.size() > 0) {
            for (Campanha campanha : listaRetorno) {
                try {
                    String nomeArquivo = campanha.getArquivoDestinatario();
                    FileReader reader;
                    reader = new FileReader(nomeArquivo + ".txt");
                    BufferedReader leitor = new BufferedReader(reader);
                    String linha = null;
                    try {
                        while ((linha=leitor.readLine()) !=null) {
                            if (!linha.isEmpty()) {
                                Pacote p = new Pacote();
                                p.setOperadora(campanha.getOperadora());
                                p.setCampanha(campanha);
                                p.setNumero(linha);
                                p.setMensagem(campanha.getMensagem());
                                p.setStatus(StatusPacoteEnum.NOVO);
                                DaoBasico.persist(p, em, utx);
                            }
                        }
                    } catch (IOException ex) {
                        Logger.getLogger(CriadorPacotesTSBean.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(CriadorPacotesTSBean.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
}
